
package app;

import java.awt.event.*;
import java.util.ArrayList;

/**
 * Klasa przekazująca informacje odebrane z klawiatury do obiektów klasy Key.
 * Ustawia moc w obiektach klasy Key przypisanych do danych klawiszy z klawiatury.
 * @author morohusky
 */
public class Controller implements KeyListener {
    private int _idx = 0;
    private final ArrayList<int[]> _controls;
    private final ArrayList<Key[]> _keys;
    
    
    public Controller() {
        _controls = new ArrayList();
        _keys = new ArrayList();
    }
    
    
    /**
     * Dodaje zestaw klawiszy do sterowania
     * @param up Kod klawisza "w górę"
     * @param down Kod klawisza "w dół"
     * @param left Kod klawisza "w lewo"
     * @param right Kod klawisza "w prawo"
     * @return Indeks zestawu sterowania
     */
    public int addControls(int up, int down, int left, int right) {
        int id = _controls.size();
        _controls.add(new int[] { up, down, left, right });
        _keys.add(new Key[] { new Key(), new Key(), new Key(), new Key() });
        
        return id;
    }
    
    /**
     * Pobiera zestaw klawiszy sterujących odpowiadający podanemu indeksowi
     * @param idx Indeks zestau sterującego
     * @return Zestaw klawiszy
     */
    public Key[] getControls(int idx) {
        return _keys.get(idx);
    }
    
    /**
     * Pobranie kolejnego zestawu sterującego
     * @return Zestaw klawiszy
     */
    public Key[] getNextControls() {
        return _keys.get(_idx++);
    }
    
    
    @Override
    public void keyTyped(KeyEvent e) { }
    
    @Override
    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
        
        for (int i = 0; i < _controls.size(); i++) {
            int[] controls = _controls.get(i);
            Key[] keys = _keys.get(i);
            
            for (int j = 0; j < controls.length; j++) {
                if (code == controls[j]) keys[j].setPower(100);
            }
        }
    }
    
    @Override
    public void keyReleased(KeyEvent e) {
        int code = e.getKeyCode();
        
        
        for (int i = 0; i < _controls.size(); i++) {
            int[] controls = _controls.get(i);
            Key[] keys = _keys.get(i);
            
            for (int j = 0; j < controls.length; j++) {
                if (code == controls[j]) keys[j].resetPower();
            }
        }
    }
    
    
}
